package com.tanjun.publicservice.web.controller;

import com.tanjun.common.annotation.Edit;
import com.tanjun.common.model.R;
import com.tanjun.common.response.PageResponse;
import com.tanjun.pubilcservice.request.dict.DictPageRequest;
import com.tanjun.pubilcservice.request.dict.DictVo;
import com.tanjun.pubilcservice.response.dict.SysDictDataDto;
import com.tanjun.pubilcservice.response.dict.SysDictDetailDto;
import com.tanjun.publicservice.web.biz.SysDictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

import static com.tanjun.common.constants.UrlConstant.URL_USER.ADMIN;
import static com.tanjun.common.constants.UrlConstant.URL_AUTH.OPEN;

@RestController
@RequestMapping("/sysDict")
public class SysDictController {
    @Autowired
    private SysDictBiz dictBiz;
    /**
     * 新增字典信息
     * @param paramVo 字典信息
     */
    @PostMapping(ADMIN+"/add")
    public R addDict(@RequestBody @Validated DictVo paramVo){
        dictBiz.addDict(paramVo);
        return R.OK();
    }

    /**
     * 修改字典信息
     * @param paramVo 字典信息
     */
    @PostMapping(ADMIN+"/update")
    public R updateDict(@RequestBody @Validated(Edit.class) DictVo paramVo){
        dictBiz.updateDict(paramVo);
        return R.OK();
    }

    /**
     * 删除字典信息
     * @param id id
     */
    @GetMapping(ADMIN+"/del")
    public R delDict(@RequestParam Long id){
       dictBiz.delDict(id);
       return R.OK();
    }

    /**
     * 获取字典基础信息+数据列表信息
     * @param id 字典id
     * @return 字典详细信息
     */
    @GetMapping(ADMIN+"/getDetailById")
    public R<SysDictDetailDto> getDetailById(@RequestParam Long id){
        return R.OK(dictBiz.getDetailById(id));
    }

    /**
     * 分页查询字典基本信息
     * @param paramVo 分页查询
     * @return 字典基本信息
     */
    @PostMapping(ADMIN+"/listPageDict")
    public R<PageResponse<SysDictDetailDto>> listPageDict(@RequestBody @Validated DictPageRequest paramVo){
        return R.OK(dictBiz.listPageDict(paramVo));
    }

    /**
     * 通过字典编码获取字典数据
     * @param dictCode 字典编码
     * @return 字典数据
     */
    @GetMapping(OPEN+"/getDictDataByDictCode")
    public R<List<SysDictDataDto>> getDictDataByDictCode(@RequestParam String dictCode){
        return R.OK(dictBiz.getDictDataByDictCode(dictCode));
    }
}
